package com.atguigu.tingshu.vo.album;

import com.atguigu.tingshu.common.util.Decimal2Serializer;
import com.atguigu.tingshu.validation.NotEmptyPaid;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.Positive;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import java.math.BigDecimal;
import java.util.List;

/**
 * 专辑信息--VO对象
 * @author sun
 */
@Data
public class AlbumInfoVo {
	/**
	 * 专辑标题
	 */
	@NotEmpty(message = "专辑标题不能为空")
	@Length(min = 2, message = "专辑标题的长度必须大于2")
	private String albumTitle;
	/**
	 * 专辑三级分类的id
	 */
	@Positive(message = "三级分类不能为空")
	private Long category3Id;
	/**
	 * 专辑简介
	 */
	@NotEmpty(message = "专辑简介不能为空")
	private String albumIntro;
	/**
	 * 专辑封面
	 */
	@NotEmpty(message = "专辑封面不能为空")
	private String coverUrl;
	/**
	 * 预计更新多少集
	 */
	private Integer estimatedTrackCount;
	/**
	 * 专辑简介，富文本
	 */
	private String albumRichIntro;
	/**
	 * 付费类型： 0101-免费、0102-vip免费、0103-付费
	 */
	@NotEmpty(message = "付费类型不能为空")
	private String payType;
	/**
	 * 价格类型： 0201-单集 0202-整专辑
	 */
	private String priceType;
	/**
	 * 价格
	 */
	@JsonSerialize(using = Decimal2Serializer.class)
	private BigDecimal price;
	/**
	 * 折扣 0.1-9.9 不打折 -1
	 */
	@JsonSerialize(using = Decimal2Serializer.class)
	private BigDecimal discount = new BigDecimal(-1);
	/**
	 * vip折扣  0.1-9.9 不打折 -1
	 */
	@JsonSerialize(using = Decimal2Serializer.class)
	private BigDecimal vipDiscount = new BigDecimal(-1);
	/**
	 * 免费试听集数
	 */
	private Integer tracksForFree;
	/**
	 * 每集免费试听秒数
	 */
	private Integer secondsForFree;
	/**
	 * 购买须知  富文本
	 */
	private String buyNotes;
	/**
	 * 卖点
	 */
	private String sellingPoint;
	/**
	 * 是否公开：0-否 1-是
	 */
	private String isOpen;
	/**
	 * 属性值集合
	 * 需要递归校验
	 */
	private List<AlbumAttributeValueVo> albumAttributeValueVoList;

	/**
	 * 获取"付费类型_价格类型"
	 * @return "付费类型_价格类型"
	 */
	@NotEmptyPaid(message = "价格类型不能为空")
	public String getPayTypeAndPriceType() {
		return this.getPayType() + "_" + this.getPriceType();
	}

	/**
	 * 获取"付费类型_价格"
	 * @return "付费类型_价格"
	 */
	@NotEmptyPaid(message = "价格不能为空")
	public String getPayTypeAndPrice() {
		return this.getPayType() + "_" + this.getPrice();
	}
}